﻿using Furion.InstantMessaging;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http.Connections;
using Microsoft.AspNetCore.SignalR;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FurStudy.Core
{
    /// <summary>
    /// 聊天集线器
    /// </summary>
    [MapHub("/hubs/chathub")] // 配置连接地址，也可以使用SignalR提供的方式，在Startup.cs配置
    public class ChatHub : Hub
    {
        /// <summary>
        /// 定义一个方法供客户端调用
        /// </summary>
        /// <param name="user"></param>
        /// <param name="message"></param>
        /// <returns></returns>
        public Task SendMessage(string user, string message)
        {
            // 触发客户端定义监听的方法
            return Clients.All.SendAsync("ReceiveMessage", user, message);

            #region 服务端和客户端双工通信

            // 触发所有客户端代码
            //Clients.All.客户端方法(参数);

            // 触发调用者客户端
            //Clients.Caller.客户端方法(参数);

            // 触发除了调用者以外的客户端
            //Clients.Others.客户端方法(参数);

            // 触发特定用户客户端
            //Clients.User("用户").客户端方法(参数);

            // 触发多个用户客户端
            //Clients.Users("用户", "用户2", ...).客户端方法(参数);

            // 触发分组内客户端
            //Clients.Group("分组").客户端方法(参数);

            // 触发多个分组客户端
            //Clients.Groups("分组", "分组2", ...).客户端方法(参数);

            // 触发分组外的客户端
            //Clients.GroupExcept("分组").客户端方法(参数);

            #endregion
        }

        public static void HttpConnectionDispatcherOptionsSettings(HttpConnectionDispatcherOptions options)
        {
            // 配置
        }

        public static void HubEndpointConventionBuilderSettings(HubEndpointConventionBuilder Builder)
        {
            // 配置
        }
    }
}
